//************************************************************************
// author	:	vera												
// date		:	2011/4/3 1:28 					                 
//************************************************************************
#ifndef SL_GROUP_NODE_H_
#define SL_GROUP_NODE_H_
#include "Node.h"
namespace sl
{
	typedef std::vector< ref_ptr<sl::Node> > ChildList;
	class SL_EXPORT GroupNode : public Node
	{
		public:
			GroupNode(void);
			GroupNode( const GroupNode & groupNode );
			~GroupNode(void);

			
			virtual void Accept( sl::NodeVisitor * pNodeVisitor );
			virtual void Ascend( sl::NodeVisitor * pNodeVisitor );
			virtual void Traverse( sl::NodeVisitor * pNodeVisitor );

			virtual const std::string libraryname() { return "sl"; }
			virtual const std::string classname() { return "GroupNode"; }

			virtual bool AddChild( sl::Node * pChild );
			virtual bool RemoveChild( sl::Node * pChild );
			virtual bool InsertChild( u32 nIndex, Node * pChild );
			virtual bool RemoveChild( u32 nIndex );
			virtual bool RemoveChild( u32 nIndex, u32 nRemoveNum );

			u32 GetChildNum()	{ return m_vChildList.size();}
		
			
		protected:

			u32 findchildindex( sl::Node * child );

			ChildList	m_vChildList;
	};
}

#endif